package com.zaimokuza.cn.service;

import com.zaimokuza.cn.entity.PageResult;
import com.zaimokuza.cn.entity.auth.Resources;
import com.zaimokuza.cn.entity.auth.RoleResourcesRelation;

import java.util.ArrayList;

/**
 * @author zaimokuza
 */
public interface ResourcesService {

    /**
     * 添加资源
     *
     * @param resources 资源信息
     */
    void addResources(Resources resources);

    /**
     * 更新资源
     *
     * @param resources 资源信息
     */
    void updateResources(Resources resources);

    /**
     * 调整角色的资源关联信息
     *
     * @param relations 角色ID及对应的资源信息
     */
    void updateRoleResourcesRelations(RoleResourcesRelation relations);

    /**
     * 根据资源ID删除资源
     *
     * @param id 资源ID
     */
    void deleteResources(Long id);

    /**
     * 根据角色ID批量删除角色资源关联关系
     *
     * @param roleId 角色ID
     */
    void deleteBatchRoleResourcesRelationByRoleId(String roleId);

    /**
     * 根据用户ID查询资源信息
     *
     * @param userId 用户ID
     * @return 资源信息集合
     */
    ArrayList<Resources> getResourcesListByUserId(String userId);

    /**
     * 查询资源信息集合，ID和路径
     *
     * @return 资源信息集合
     */
    ArrayList<Resources> getResourcesUrlList();

    /**
     * 查询资源树
     *
     * @param ignoreId 忽略ID
     * @return 资源树
     */
    ArrayList<Resources> getResourcesTree(Long ignoreId);

    /**
     * 根据角色ID查询资源ID集合
     *
     * @param roleId 角色ID
     * @return 资源ID集合
     */
    ArrayList<Long> getResourcesIdListByRoleId(String roleId);

    /**
     * 查询资源分页信息
     *
     * @param name 名称
     * @param url  请求路径
     * @param type 类型
     * @param page 当前页
     * @param size 每页条数
     * @return 资源信息
     */
    PageResult<Resources> getResourcesPage(String name, String url, Integer type, Integer page, Integer size);

    /**
     * 根据资源ID查询资源详情
     *
     * @param id 资源ID
     * @return 资源信息
     */
    Resources getResources(Long id);

}
